#pragma once
#include <functional>
#include <memory>

class Buffer;
class TcpConnection;
class IOUringTcpConnection;
class Timestamp;

using TcpConnectionPtr = std::shared_ptr<TcpConnection>;
using ConnectionCallback = std::function<void(const TcpConnectionPtr &)>;
using CloseCallback = std::function<void(const TcpConnectionPtr &)>;
using WriteCompleteCallback = std::function<void(const TcpConnectionPtr &)>;
using MessageCallback =
    std::function<void(const TcpConnectionPtr &, Buffer *, Timestamp)>;
using HighWaterMarkCallback =
    std::function<void(const TcpConnectionPtr &, size_t)>;

using IOUringTcpConnectionPtr = std::shared_ptr<IOUringTcpConnection>;
using IOUringTcpConnectionPtr = std::shared_ptr<IOUringTcpConnection>;
using IOUringConnectionCallback =
    std::function<void(const IOUringTcpConnectionPtr &)>;
using IOUringCloseCallback =
    std::function<void(const IOUringTcpConnectionPtr &)>;
using IOUringWriteCompleteCallback =
    std::function<void(const IOUringTcpConnectionPtr &)>;
using IOUringMessageCallback =
    std::function<void(const IOUringTcpConnectionPtr &, Buffer *, Timestamp)>;
using IOUringHighWaterMarkCallback =
    std::function<void(const IOUringTcpConnectionPtr &, size_t)>;
